#ifndef _VN_VECTOR2_H
#define _VN_VECTOR2_H

namespace vn
{
	class Vector2
	{
	public:
		Vector2(void);
		Vector2(float p_x, float p_y);
		Vector2(int p_x, int p_y);
		Vector2(const Vector2& p_vector2);
		virtual ~Vector2(void);

		Vector2& operator = (const Vector2& rhs);
		Vector2& operator *= (const Vector2& rhs);
		Vector2& operator *= (const float fScalar);

		bool operator == (const Vector2& rhs) const;
		bool operator != (const Vector2& rhs) const;
		void operator += (const Vector2& rhs);
		void operator -= (const Vector2& rhs);

		Vector2 operator * (const Vector2& rhs) const;
		Vector2 operator / (const Vector2& rhs) const;
		Vector2 operator + (const Vector2& rhs) const;
		Vector2 operator - (const Vector2& rhs) const;
	
		Vector2 operator * (const float fScalar) const;
		Vector2 operator / (const float fScalar) const;
		Vector2 operator + (const float fScalar) const;
		Vector2 operator - (const float fScalar) const;



		float magnitude() const;
		float squaredMagnitude() const;

		void chamfer();
		void normalize();
		Vector2 normalizedCopy() const;

		float dot(const Vector2& rhs) const; 

		float x;
		float y;

		static const Vector2 ZERO;
		static const Vector2 UNIT_X;
		static const Vector2 UNIT_Y;
		static const Vector2 NEGATIVE_UNIT_X;
		static const Vector2 NEGATIVE_UNIT_Y;
	};
}


#endif // _VN_VECTOR2_H